<?php
/** [栏目逻辑层]
 * @Author: 976123967@qq.com
 * @Date:   2015-01-09 16:59:21
 * @Last Modified by:   Administrator
 * @Last Modified time: 2015-04-01 18:07:58
 */
class CategoryLogic extends Model{

	// 指定表名称
	protected $tableName = 'category';

	private $cache;

	/**
	 * [_initialize 初始化]
	 * @return [type] [description]
	 */
	public function _initialize()
	{
		$this->cache = S('category');
	}

	// 自动验证
	/* array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间])
	*
	*  验证条件
	*  Model::EXISTS_VALIDATE 或者0 存在字段就验证 （默认）
	*  Model::MUST_VALIDATE 或者1 必须验证
	*  Model::VALUE_VALIDATE或者2 值不为空的时候验证
	*
	*  验证时间
	*  Model:: MODEL_INSERT 或者1新增数据时候验证
	*  Model:: MODEL_UPDATE 或者2编辑数据时候验证
	*  Model:: MODEL_BOTH 或者3 全部情况下验证（默认）
	* */

	protected $_validate = array(
	   	array('cname','require','分类名不能为空',1),
	   	array('pid','check_pid','不能选择自己',1,'callback',2),
	   	array('default_tpl','require','封面模板不能为空',1),
	   	array('list_tpl','require','列表页模板不能为空',1),
	   	array('view_tpl','require','详细页模板不能为空',1),
	   	array('remark','require','请输入控制器名称',1),
	);

	// 自动完成
	/* array(填充字段,填充内容,[填充条件,附加规则])
	*  填充条件
	*  Model:: MODEL_INSERT或者1 新增数据的时候处理（默认）
	*  Model:: MODEL_UPDATE或者2更新数据的时候处理
	*  Model:: MODEL_BOTH或者3所有情况都进行处理
	* 
	**/
	protected $_auto = array(
		array('remark','_ucfirst',3,'callback'),
		array('sort','intval',3,'function') 
	);
	/**
	 * [_ucfirst 处理控制器名称]
	 * @param  [type] $con [description]
	 * @return [type]      [description]
	 */
	protected function _ucfirst($con)
	{
		// 全部转成小写，在首字母大写
		return ucfirst(strtolower($con));
	}


	/**
	 * [check_pid 验证父级pid]
	 * @return [type]      [description]
	 */
	public function check_pid()
	{
		// 父级pid
		$pid =I('post.pid',null,'intval');
		// cid
		$cid = I('post.cid',null,'intval');
 		// 编辑时候判断父级和cid 不能相同
		if($cid == $pid)
		{
			return false;
		}
		return true;
	}




	/**
	 * [get_all 读取所有栏目]
	 * @return [type] [description]
	 */
	public function get_all()
	{
		$data = $this->cache;
		if(!$data) return false;

		// 返回树状结构
		return Data::tree($data,'cname','cid');
	}

	/**
	 * [add_category 添加栏目]
	 */
	public function add_category()
	{
		if(!$this->create())
			return false;

		$data = $this->data;

		// 上传图片
		$pic = $this->alter_pic();
		if($pic === false)
			return false;
		
		$data['pic'] = $pic;
		$cid  		 = $this->add($data);

		// 更新缓存
		$this->update_cache();
		return $cid;
	}
	/**
	 * [update_category 编辑栏目]
	 * @return [type] [description]
	 */
	public function update_category()
	{
		if(!$this->create())
			return false;

		$data = $this->data;

		// 上传图片
		$pic = $this->alter_pic();
		if($pic === false)
			return false;
		if($pic!='')
			$data['pic'] = $pic;
		$this->save($data);

		// 更新缓存
		$this->update_cache();
		return true;
	}


	/**
	 * [find_one 查找单条数据]
	 * @return [type] [description]
	 */
	public function find_one()
	{
		$cid = I('get.cid');
		$pid = I('get.pid');
		$cid = $cid?$cid:$pid;

		return isset($this->cache[$cid])?$this->cache[$cid]:null;
	}


	/**
	 * [update_cache 更新缓存]
	 * @return [type] [description]
	 */
	public function update_cache()
	{
		// 读取所有栏目
		$data=$this->order(array('sort'=>'asc','cid'=>'asc'))->select();
		$temp=array();
		// 格式化数据
		if($data)
		{
			$modelAll   = D('Model','Logic')->get_all();
			// 处理数据
			foreach($data as $k=>$v)
			{
				$v['disabled']='';
				if($v['cat_type']==1)
				{
					$v['type']="普通";
				}
				elseif($v['cat_type']==2)
				{
					$v['disabled']='disabled="disabled"';
					$v['type']="封面";
				}
				elseif($v['cat_type']==3)
				{
					
					$v['type']="跳转";
				}
				elseif($v['cat_type']==4)
				{
					$v['type']="单页";
				}


				$v['showtarget']='';
				if($v['target'] == 2)
				{
					$v['showtarget']='target="_blank"';
				}

				$v['has_pic'] = false;
				// 栏目图片
				if($v['pic'])
				{
					$v['has_pic'] = true;
				}
				
				$v['pathpic']= $v['pic']?__ROOT__.'/'.$v['pic']:__ROOT__.'/Data/Public/images/default.gif';

				// 栏目选择的模型名称
				$v['model'] = $modelAll[$v['model_mid']]['remark'];
				$temp[$v['cid']]=$v;
			}
		}
		// 写缓存
		S('category',$temp);
	}

	/**
	 * [alter_pic 上传图片]
	 * @return [type] [description]
	 */
	public function alter_pic()
	{

		$cid = I('post.cid');
		if($cid&&!empty($_FILES['pic']['name']))
		{
			$pic = $this->cache[$cid]['pic'];
			is_file($pic) && unlink($pic);
		}

		if(!empty($_FILES['pic']['name']))
		{
			// 上传类
			import('ORG.Net.UploadFile');
			$upload = new UploadFile();// 实例化上传类
			$upload->maxSize  = 314572800 ;// 设置附件上传大小
            $upload->allowExts  = array('jpg', 'gif', 'png', 'jpeg','pdf','apk','rar','zip');// 设置附件上传类型
            $savePath = './Data/Uploads/image/'.date('Y').'/'.date('m').'/'.date('d').'/';
            // 创建目录
            is_dir($savePath) || mkdir($savePath,0777,true);
            // 执行上传
            if($info=$upload->uploadOne($_FILES['pic'],$savePath))
                return $info[0]['savepath'].$info[0]['savename'];
            else
            {
            	$this->error=$upload->getErrorMsg();
            	return false;
            }

		}
		else
			return '';
	}


	/**
	 * [del_attachment 删除附件]
	 * @return [type] [description]
	 */
	public function del_attachment()
	{
		$field  = I('post.field');
		$cid 	= I('post.cid');
		$attachment = isset($this->cache[$cid][$field])?$this->cache[$cid][$field]:'';
		if(!$attachment)
		{
			$this->error = '信息不存在';
			return false;
		}
		is_file($attachment) && unlink($attachment);
		$this->save(array('pic'=>'','cid'=>$cid));
		// 更新缓存
		$this->update_cache();
		return ture;
	}

	/**
	 * [del_category 删除栏目]
	 * @return [type] [description]
	 */
	public function del_category()
	{
		$cid = I('get.cid');
		$data = isset($this->cache[$cid])?$this->cache[$cid]:'';
		if(!$data)
		{
			$this->error = '信息不存在';
			return false;
		}
		// 验证还有子栏目
		if(D('Category')->get_child_list($cid))
		{
			$this->error = '请先删除子栏目';
			return false;
		}

		// 单页 需要把文档删除
		if($data['cat_type']==4)
		{
			$articleLogic = D('Article','Logic');
			// 获取文档信息
			$article      = $articleLogic->check_cid($cid);
			// 删除文档
			if($article)
				$articleLogic->del_article_by_aid_cid($article['aid'],$cid);
		}

		// 验证栏目下面不能文档
		if(D('Article')->where(array('category_cid'=>$cid))->find())
		{
			$this->error = '请先删除文档';
			return false;
		}
		$this->delete($cid);
		// 更新缓存
		$this->update_cache();
		return true;
	}


	


	/**
	 * [operation 处理批量操作]
	 * @return [type] [description]
	 */
	public function operation()
	{
		$cid  = I('post.cid');
		switch (true) 
		{
			// 排序
			case isset($_POST['update_sort']):
				$sort = I('post.sort');
				foreach($cid as $k=>$v)
				{
					$this->save(array('sort'=>$sort[$k],'cid'=>$v));
				}
				$msg= '排序成功';
				break;
			default:
				$this->error = '操作选择错误';
				return false;

		}
		// 更新缓存
		$this->update_cache();
		return $msg;
	}


	




	
}